#ifndef NOSAL_CORE_UTILITY_H_
#define NOSAL_CORE_UTILITY_H_

#include <initializer_list>
#include <iterator>
#include <cstddef>
#include <climits>

namespace netaos {
namespace nosal {
namespace core {

struct in_place_t
{
    explicit in_place_t() = default;
};

constexpr in_place_t in_place{};

template <typename T>
struct in_place_type_t
{
    explicit in_place_type_t() = default;
};

template <typename T>
constexpr in_place_type_t<T> in_place_type{};

template <std::size_t I>
struct in_place_index_t
{
    explicit in_place_index_t() = default;
};

template <std::size_t I>
constexpr in_place_index_t<I> in_place_index{};

}  // namespace core
}  // namespace nosal
}  // namespace netaos

#endif  // NOSAL_CORE_UTILITY_H_
